package com.lalameow.serverlogin.util;

import com.lalameow.serverlogin.client.ClientProxy;
import net.minecraft.util.CryptManager;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.lang.Character.UnicodeBlock;
import java.security.KeyPair;

public class CoderUtil {

	public static String gbEncoding(final String gbString) {
		char[] utfBytes = gbString.toCharArray();
		String unicodeBytes = "";
		for (int byteIndex = 0; byteIndex < utfBytes.length; byteIndex++) {
			String hexB = Integer.toHexString(utfBytes[byteIndex]);
			if (hexB.length() <= 2) {
				hexB = "00" + hexB;
			}
			unicodeBytes = unicodeBytes + "\\u" + hexB;
		}
		return unicodeBytes;
	}

	public static String decodeUnicode(final String dataStr) {
		int start = 0;
		int end = 0;
		final StringBuffer buffer = new StringBuffer();
		while (start > -1) {
			end = dataStr.indexOf("\\u", start + 2);
			String charStr = "";
			if (end == -1) {
				charStr = dataStr.substring(start + 2, dataStr.length());
			} else {
				charStr = dataStr.substring(start + 2, end);
			}
			char letter = (char) Integer.parseInt(charStr, 16); // 16进制parse整形字符串。
			buffer.append(new Character(letter).toString());
			start = end;
		}
		return buffer.toString();
	}


	/**

	  * utf-8 转换成 unicode

	  * @return

	  */

	 public static String utf8ToUnicode(String inStr) {
	        char[] myBuffer = inStr.toCharArray();
	        StringBuffer sb = new StringBuffer();
	        for (int i = 0; i < inStr.length(); i++) {

	         UnicodeBlock ub = UnicodeBlock.of(myBuffer[i]);

	            if(ub == UnicodeBlock.BASIC_LATIN){

	             //英文及数字等

	             sb.append(myBuffer[i]);

	            }else if(ub == UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS){

	             //全角半角字符

	             int j = (int) myBuffer[i] - 65248;

	             sb.append((char)j);

	            }else{

	             //汉字

	             short s = (short) myBuffer[i];

	                String hexS = Integer.toHexString(s);

	                String unicode = "\\u"+hexS;

	             sb.append(unicode.toLowerCase());

	            }

	        }

	        return sb.toString();

	    }

	 

	 /**

	  * unicode 转换成 utf-8

	  * @return

	  */

	 public static String unicodeToUtf8(String theString){

	  char aChar;

	  int len = theString.length();

	  StringBuffer outBuffer = new StringBuffer(len);

	  for (int x = 0; x < len;) {

	   aChar = theString.charAt(x++);

	   if (aChar == '\\') {

	    aChar = theString.charAt(x++);

	    if (aChar == 'u') {

	     // Read the xxxx

	     int value = 0;

	     for (int i = 0; i < 4; i++) {

	      aChar = theString.charAt(x++);

	      switch (aChar) {

	      case '0':

	      case '1':

	      case '2':

	      case '3':

	      case '4':

	      case '5':

	      case '6':

	      case '7':

	      case '8':

	      case '9':

	       value = (value << 4) + aChar - '0';

	       break;

	      case 'a':

	      case 'b':

	      case 'c':

	      case 'd':

	      case 'e':

	      case 'f':

	       value = (value << 4) + 10 + aChar - 'a';

	       break;

	      case 'A':

	      case 'B':

	      case 'C':

	      case 'D':

	      case 'E':

	      case 'F':

	       value = (value << 4) + 10 + aChar - 'A';

	       break;

	      default:

	       throw new IllegalArgumentException(

	         "Malformed   \\uxxxx   encoding.");

	      }

	     }

	     outBuffer.append((char) value);

	    } else {

	     if (aChar == 't')

	      aChar = '\t';

	     else if (aChar == 'r')

	      aChar = '\r';

	     else if (aChar == 'n')

	      aChar = '\n';

	     else if (aChar == 'f')

	      aChar = '\f';

	     outBuffer.append(aChar);

	    }

	   } else

	    outBuffer.append(aChar);

	  }

	  return outBuffer.toString();

	 }


}
